// pages/index/im/im.js
import TIM from "../../../utils/tim-wx"
const app = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    tim: null,
    tim2: null
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let self = this;
    let opts = {
      SDKAppID: 1400314933 // 接入时需要将0替换为您的云通信应用的 SDKAppIDn/；；‘epptg.t./r//v vh【【h'h'p'g'g'g'g'g'g'g'g'g'g'g'g'g'g'g'g
    };
    let tim = TIM.create(opts); // SDK 实例通常用 tim 表示
    tim.setLogLevel(4); // 普通级别，日志量较多，接入时建议使用    

    let tim2 = TIM.create(opts); // SDK 实例通常用 tim 表示
    tim2.setLogLevel(1); // 普通级别，日志量较多，接入时建议使用    

    tim.on(TIM.EVENT.MESSAGE_RECEIVED, function (event) {
      // 收到推送的单聊、群聊、群提示、群系统通知的新消息，可通过遍历 event.data 获取消息列表数据并渲染到页面
      // event.name - TIM.EVENT.MESSAGE_RECEIVED
      // event.data - 存储 Message 对象的数组 - [Message]
      console.log('TM:MESSAGE_RECEIVED');
      console.log(JSON.stringify(event));
    });

    tim.on(TIM.EVENT.GROUP_LIST_UPDATED, function (event) {
      // 收到群组列表更新通知，可通过遍历 event.data 获取群组列表数据并渲染到页面
      // event.name - TIM.EVENT.GROUP_LIST_UPDATED
      // event.data - 存储 Group 对象的数组 - [Group]
      console.log('TM:GROUP_LIST_UPDATED');
      console.log(JSON.stringify(event));
    });

    tim2.on(TIM.EVENT.MESSAGE_RECEIVED, function (event) {
      // 收到推送的单聊、群聊、群提示、群系统通知的新消息，可通过遍历 event.data 获取消息列表数据并渲染到页面
      // event.name - TIM.EVENT.MESSAGE_RECEIVED
      // event.data - 存储 Message 对象的数组 - [Message]
      console.log('TM2:MESSAGE_RECEIVED');
      console.log(JSON.stringify(event));
    });

    tim2.on(TIM.EVENT.GROUP_LIST_UPDATED, function (event) {
      // 收到群组列表更新通知，可通过遍历 event.data 获取群组列表数据并渲染到页面
      // event.name - TIM.EVENT.GROUP_LIST_UPDATED
      // event.data - 存储 Group 对象的数组 - [Group]
      console.log('TM2:GROUP_LIST_UPDATED');
      console.log(JSON.stringify(event));
    });

    // tim.on(TIM.EVENT.GROUP_SYSTEM_NOTICE_RECEIVED, function (event) {
    //   // 收到新的群系统通知
    //   // event.name - TIM.EVENT.GROUP_SYSTEM_NOTICE_RECEIVED
    //   // event.data.type - 群系统通知的类型，详情请参见 GroupSystemNoticePayload 的 operationType 枚举值说明
    //   // event.data.message - Message 对象，可将 event.data.message.content 渲染到到页面
    //   console.log('GROUP_SYSTEM_NOTICE_RECEIVED');
    //   console.log(JSON.stringify(event));
    // });

    // tim.on(TIM.EVENT.MESSAGE_RECEIVED, function (event) {
    //   // 收到推送的单聊、群聊、群提示、群系统通知的新消息，可通过遍历 event.data 获取消息列表数据并渲染到页面
    //   // event.name - TIM.EVENT.MESSAGE_RECEIVED
    //   // event.data - 存储 Message 对象的数组 - [Message]
    //   console.log('MESSAGE_RECEIVED');
    //   console.log(event);
    //   event.data.forEach(d => {
    //     self.getMessage(d)
    //   })
    // });

    // // 收到会话列表更新通知，可通过遍历 event.data 获取会话列表数据并渲染到页面
    // tim.on(TIM.EVENT.CONVERSATION_LIST_UPDATED, function (event) {
    //   // event.name - TIM.EVENT.CONVERSATION_LIST_UPDATED
    //   // event.data - 存储 Conversation 对象的数组 - [Conversation]
    //   console.log('CONVERSATION_LIST_UPDATED');
    //   console.log(event);
    //   event.data.forEach(d => {
    //     self.getConversation(d);
    //   });
    // });

    // // 收到新的群系统通知
    // tim.on(TIM.EVENT.GROUP_SYSTEM_NOTICE_RECEIVED, function (event) {
    //   // event.name - TIM.EVENT.GROUP_SYSTEM_NOTICE_RECEIVED
    //   const type = event.data.type; //- 群系统通知的类型，详情请参见 GroupSystemNoticePayload 的 operationType 枚举值说明
    //   const d = event.data.message; //- Message 对象，可将 event.data.message.content 渲染到到页面
    //   console.log('GROUP_SYSTEM_NOTICE_RECEIVED:');
    //   console.log(event);
    //   self.getGroupSystemNotice(d.payload)
    // });

    this.setData({
      tim: tim
    })
  },
  getConversation: function (d) {
    let self = this;
    var msg = '';
    switch (d.type) {
      case TIM.TYPES.CONV_GROUP:
        msg = '群组会话';
        break;
      case TIM.TYPES.CONV_C2C:
        msg = 'C2C会话';
        break;
      case TIM.TYPES.CONV_SYSTEM:
        msg = '系统会话';
        break;
    }
    switch (d.subType) {
      case TIM.TYPES.GRP_PRIVATE:
        msg += ',私有群';
        break;
      case TIM.TYPES.GRP_PUBLIC:
        msg += ',公开群';
        break;
      case TIM.TYPES.GRP_CHATROOM:
        msg += ',聊天室';
        break;
      case TIM.TYPES.GRP_AVCHATROOM:
        msg += ',音视频聊天室';
        break;
    }
    var message = d.lastMessage;
    msg += ",发送方:" + message.fromAccount;
    switch (message.type) {
      case TIM.TYPES.MSG_TEXT:
        msg += ',接收文本消息:' + message.payload.text;
        break;
      case TIM.TYPES.MSG_IMAGE:
        msg += ',接收图片消息:' + message.payload.imageFormat;
        break;
      case TIM.TYPES.MSG_AUDIO:
        msg += ',接收音频消息:' + message.payload.url;
        break;
      case TIM.TYPES.MSG_FILE:
        msg += ',接收文件消息:' + message.payload.fileName;
        break;
      case TIM.TYPES.MSG_GRP_TIP:
        msg += ',群提示消息:' + message.payload.description;
        break;
      case TIM.TYPES.MSG_GRP_SYS_NOTICE:
        msg += ',群系统通知消息:' + self.getGroupSystemNotice(message.payload);
        break;
    }
    console.log(msg);
  },
  getMessage: function (message) {
    let self = this;
    if (message.isSystemMessage) {
      return;
    }
    var msg = '接收方:' + message.to + ",发送方:" + message.from;
    switch (message.conversationType) {
      case TIM.TYPES.CONV_GROUP:
        msg += ',群组会话';
        break;
      case TIM.TYPES.CONV_C2C:
        msg += ',C2C会话';
        break;
      case TIM.TYPES.CONV_SYSTEM:
        msg += ',系统会话';
        break;
    }
    switch (message.type) {
      case TIM.TYPES.MSG_TEXT:
        msg += ',接收文本消息:' + message.payload.text;
        break;
      case TIM.TYPES.MSG_IMAGE:
        msg += ',接收图片消息:' + message.payload.imageFormat;
        break;
      case TIM.TYPES.MSG_AUDIO:
        msg += ',接收音频消息:' + message.payload.url;
        break;
      case TIM.TYPES.MSG_FILE:
        msg += ',接收文件消息:' + message.payload.fileName;
        break;
      case TIM.TYPES.MSG_GRP_TIP:
        msg += ',群提示消息:' + self.getGroupTipNotice(message.payload);
        break;
      case TIM.TYPES.MSG_GRP_SYS_NOTICE:
        msg += ',群系统通知消息:' + self.getGroupSystemNotice(message.payload);
        break;
    }
    console.log(msg);
  },
  getGroupSystemNotice: function (payload) {
    var msg = '';
    switch (payload.operationType) {
      case 1:
        msg = ',有用户申请加群:' + payload.operatorID;
        break;
      case 2:
        msg = ',申请加群被同意:' + payload.operatorID;
        break;
      case 3:
        msg = ',申请加群被拒绝:' + payload.operatorID;
        break;
      case 4:
        msg = ',被踢出群组:' + payload.operatorID;
        break;
      case 5:
        msg = ',群组被解散:' + payload.operatorID;
        break;
      case 6:
        msg = ',创建群组:' + payload.operatorID;
        break;
      case 7:
        msg = '	,邀请加群:' + payload.operatorID;
        break;
      case 8:
        msg = ',退群: ' + payload.operatorID;
        break;
      case 9:
        msg = ',设置管理员:' + payload.operatorID;
        break;
      case 10:
        msg = ',取消管理员:' + payload.operatorID;
        break;
    }
    return msg;
  },
  getGroupTipNotice: function (payload) {
    var msg = '';
    switch (payload.operationType) {
      case TIM.TYPES.GRP_TIP_MBR_JOIN:
        msg = ',有成员加群:' + payload.operatorID;
        break;
      case TIM.TYPES.GRP_TIP_MBR_QUIT:
        msg = ',有群成员退群:' + payload.operatorID;
        break;
      case TIM.TYPES.GRP_TIP_MBR_KICKED_OUT:
        msg = ',有群成员被踢出群:' + payload.operatorID;
        break;
      case TIM.TYPES.GRP_TIP_MBR_SET_ADMIN:
        msg = ',有群成员被设为管理员:' + payload.operatorID;
        break;
      case TIM.TYPES.GRP_TIP_MBR_CANCELED_ADMIN:
        msg = ',有群成员被撤销管理员:' + payload.operatorID;
        break;
      case TIM.TYPES.GRP_TIP_GRP_PROFILE_UPDATED:
        msg = ',群组资料变更:' + payload.operatorID;
        break;
      case TIM.TYPES.GRP_TIP_MBR_PROFILE_UPDATED:
        msg = '	,群成员资料变更:' + payload.operatorID;
        break;
    }
    return msg;
  },
  /**
   * 登录
   */
  loginTap: function () {
    let self = this;
    let promise = self.data.tim.login({
      userID: 'lvsc',
      userSig: 'eJwtzF0LgjAYBeD-suvQdx8OE7poQYuIulhkt9KmvH0hTsyK-nsyvTzPOZwvOe5M1LmGZIRFQGYho3XPFksMfO-8ZXJvb0VdoyUZFQCcijnnY*P6Ghs3eJIkDABGbfERLKVSCgrT1mM13Oqi5c168xKy*mjGzQr7pYI8zlWhtiXbnw7xG69ank26IL8-2cAwCQ__'
    });
    promise.then(function (imResponse) {
      //console.log("登录成功"); // 登录成功
    }).catch(function (imError) {
      // console.warn('login error:', imError); // 登录失败的相关信息
    });
  },
  /**
   * 退出
   */
  logoutTap: function () {
    let self = this;
    let promise = self.data.tim.logout();
    promise.then(function (imResponse) {
      // console.log("登出成功"); // 登出成功
    }).catch(function (imError) {
      // console.warn('logout error:', imError);
    });
  },
  /**
   * 创建群组
   */
  createGroupTap: function () {
    let self = this;
    let promise = self.data.tim.createGroup({
      name: "lvsc",
      type: TIM.TYPES.GRP_AVCHATROOM, //视频聊天室
      groupID: 'lvsc',
      introduction: '群介绍',
      notification: '群公告'
    });
    promise.then(function (imResponse) { // 创建成功
      // console.log("群组创建成功"); // 创建的群的资料
    }).catch(function (imError) {
      // console.warn('createGroup error:', imError); // 创建群组失败的相关信息
    });
  },
  /**
   * 解散群组
   */
  dismissGroupTap: function () {
    let self = this;
    let promise = self.data.tim.dismissGroup("lvsc");
    promise.then(function (imResponse) { // 解散成功
      // console.log("被解散的群组" + imResponse.data.groupID); // 被解散的群组 ID
    }).catch(function (imError) {
      // console.warn('dismissGroup error:', imError); // 解散群组失败的相关信息
    });
  },
  /**
   * 键入群组
   */
  joinGroupTap: function () {
    let promise = this.data.tim.joinGroup({
      groupID: 'lvsc',
      type: TIM.TYPES.GRP_AVCHATROOM
    });
    promise.then(function (imResponse) {
      switch (imResponse.data.status) {
        case TIM.TYPES.JOIN_STATUS_SUCCESS: // 加群成功
          //console.log("加入的群组资料"); // 加入的群组资料
          break;
        case TIM.TYPES.JOIN_STATUS_ALREADY_IN_GROUP: // 已经在群中
          //  console.log("已经在群中")
          break;
        default:
          break;
      }
    }).catch(function (imError) {
      console.warn('joinGroup error:', imError); // 申请加群失败的相关信息
    });
  },
  /**
   * 退出群组
   */
  quitGroupTap: function () {
    let promise = this.data.tim.quitGroup('lvsc');
    promise.then(function (imResponse) {
      //console.log("退出成功的群" + imResponse.data.groupID); // 退出成功的群 ID
    }).catch(function (imError) {
      // console.warn('quitGroup error:', imError); // 退出群组失败的相关信息
    });
  },
  /**
   * 发送消息
   */
  sentdMessageTap: function () {
    // 发送文本消息，Web 端与小程序端相同
    // 1. 创建消息实例，接口返回的实例可以上屏
    let message = this.data.tim.createTextMessage({
      to: 'lvsc',
      conversationType: TIM.TYPES.CONV_GROUP,
      payload: {
        text: 'Hello world!'
      }
    });
    // 2. 发送消息
    let promise = this.data.tim.sendMessage(message);
    promise.then(function (imResponse) {
      // 发送成功
      // console.log("发送成功");
    }).catch(function (imError) {
      // 发送失败
      console.warn('sendMessage error:', imError);
    });
  }
})